package org.bopis.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.bopis.form.RegistroUsuarioForm;
import org.bopis.general.Constantes;
import org.bopis.services.db.DAOUsuario;
import org.bopis.services.mail.MailSender;
import org.bopis.utilidades.Utilidades;

import com.boole.model.Usuario;

/**
 * Action encargado del registro de usuario
 * 
 * @author i-fernandezmolina
 * 
 */
public class RegistroUsuarioAction extends CustomBaseAction {

	private static Logger log = Logger.getLogger(RegistroUsuarioAction.class);
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		// variables
		String asunto = Constantes.EMAIL_ASUNTO_SOLICITUD_ACTIVACION;
		String mensaje = Constantes.EMAIL_MENSAJE_SOLICITUD_ACTIVACION;
		String codigoActivacion = null;
		Usuario usuario = null;
		
		//preparamos el mensaje del email
		mensaje = mensaje.replaceAll("protocol", Constantes.APP_PROTOCOL);
		mensaje = mensaje.replaceAll("nameapp", Constantes.APP_NAME);
		if(Utilidades.isVacia(Constantes.APP_PORT))
			mensaje = mensaje.replaceAll("host", Constantes.APP_HOST);
		else
			mensaje = mensaje.replaceAll("host", Constantes.APP_HOST + ":" + Constantes.APP_PORT) ;	
				
		// rellenamos el objeto Usuario con los datos del formulario
		usuario = setUsuario((RegistroUsuarioForm) form);
		codigoActivacion = Utilidades.fromStringToMD5(usuario.getEmail()
				+ usuario.getPwd());
		usuario.setCodigoActivacion(codigoActivacion);

		// guardamos en base de datos
		if(!DAOUsuario.insertUsuario(usuario)){
			addActionError(request, "error", "registro.error.save");
			return mapping.findForward("Failure");
		}else{
			
			// enviamos un mail al usuario con los datos de acceso
			MailSender mailSender = new MailSender();
			mensaje = mensaje.replaceAll("md5", codigoActivacion);
			mailSender.sendEmail(usuario.getEmail(), usuario.getScreenname(), asunto, mensaje);
			
			log.info("### " + mensaje);
			System.out.println(mensaje);
					
			addActionMessage(request, "registro.usuario.created");
			addActionMessage(request, "registro.usuario.mail.sent");

			return mapping.findForward("Success");
			
		}

	}

	/**
	 * Metodo que devuelve un objeto Usuario con los datos contenidos en el
	 * formulario
	 * 
	 * @param form
	 *            objeto RegistroUsuarioForm con los datos del formulario
	 * @return objeto Usuario con los datos del formulario
	 */
	private Usuario setUsuario(RegistroUsuarioForm form) {

		Usuario usuario = new Usuario();

		usuario.setScreenname(form.getScreenName());
		usuario.setNombre(form.getNombre());
		usuario.setApellido1(form.getApellido1());
		usuario.setApellido2(form.getApellido2());
		usuario.setEmpresa(form.getEmpresa());
		usuario.setContacto(form.getContacto());
		usuario.setTelefono(form.getTelefono());
		usuario.setEmail(form.getEmail());
		usuario.setPwd(form.getPwd());

		return usuario;

	}

}
